<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
<script>
    var a = "tt"
    var arr = [1,3,5]
    //apply @param2：arr=>...arr //作用域转换，会调用自身一次 
    fn.apply(this,arr)
    function fn(){
        console.log(this.a)
        console.log(arguments)
    }
    //bind 能够吧作用域绑定到自己内部（作用域转换），并不会调用
    var obj = {
        name:'张三'
    }
    function aa(){
        console.log(this.name || "我没有名字")
    }
    //(aa.bind(obj))()
    var name = "我是最外层的作用域"
    function bb(){
        this.name = "我是b函数作用域";
        (aa.bind(this))()
    }
    bb()
    //call  会调用自身一次， 第一个参数和apply()方法的一样，但是传递给函数的参数必须列举出来。
    //说明  call方法可以用来代替另一个对象调用一个方法，call方法可以将一个函数的对象上下文从初始的上下文改变为thisObj指定的新对象，
    // 如果没有提供thisObj参数，那么Global对象被用于thisObj。
    function fnCall(a,b){
        console.log(a)
        console.log(this.ali)
    }
    var callobj = {
        ali:"a125a65sbgf7hg",
    }
    fnCall.call(callobj,"zhangsan");
    console.log(Math.max.call({},...arr))
</script>
</body>
</html>